home *** CD-ROM | disk | FTP | other *** search
/ SGI Origin & Onyx2 Patches 1998 May / Origin and Onyx2 System Disk Patches May 1998.img / dist / patchSG0002413.idb / usr / include / protocols / routed.h.z / routed.h
C/C++ Source or Header  |  1998-01-30  |  6KB  |  175 lines

  1. /*-
  2.  * Copyright (c) 1983, 1989, 1993
  3.  *    The Regents of the University of California.  All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice, this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright
  11.  *    notice, this list of conditions and the following disclaimer in the
  12.  *    documentation and/or other materials provided with the distribution.
  13.  * 3. All advertising materials mentioning features or use of this software
  14.  *    must display the following acknowledgement:
  15.  *    This product includes software developed by the University of
  16.  *    California, Berkeley and its contributors.
  17.  * 4. Neither the name of the University nor the names of its contributors
  18.  *    may be used to endorse or promote products derived from this software
  19.  *    without specific prior written permission.
  20.  *
  21.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31.  * SUCH DAMAGE.
  32.  *
  33.  *    @(#)routed.h    8.1 (Berkeley) 6/2/93
  34.  *
  35.  *    $NetBSD$
  36.  */
  37.  
  38. #ifndef _ROUTED_H_
  39. #define    _ROUTED_H_
  40. #ifdef __cplusplus
  41. extern "C" {
  42. #endif
  43. #ident "$Revision: 1.11 $"
  44.  
  45. /*
  46.  * Routing Information Protocol
  47.  *
  48.  * Derived from Xerox NS Routing Information Protocol
  49.  * by changing 32-bit net numbers to sockaddr's and
  50.  * padding stuff to 32-bit boundaries.
  51.  */
  52.  
  53. #define    RIPv1        1
  54. #define    RIPv2        2
  55. #ifndef RIPVERSION
  56. #define    RIPVERSION    RIPv1
  57. #endif
  58.  
  59. #define RIP_PORT    520
  60.  
  61. #if RIPVERSION == 1
  62. /* Note that this so called sockaddr has a 2-byte sa_family and no sa_len.
  63.  * It is not a UNIX sockaddr, but the shape of an address as defined
  64.  * in RIPv1.  It is still defined to allow old versions of programs
  65.  * such as `gated` to use this file to define RIPv1.
  66.  */
  67. struct netinfo {
  68.     struct    sockaddr rip_dst;    /* destination net/host */
  69.     u_int32_t   rip_metric;        /* cost of route */
  70. };
  71. #else
  72. struct netinfo {
  73.     u_int16_t   n_family;
  74. #define        RIP_AF_INET        htons(AF_INET)
  75. #define        RIP_AF_UNSPEC   0
  76. #define        RIP_AF_AUTH        0xffff
  77.     u_int16_t   n_tag;        /* optional in RIPv2 */
  78.     u_int32_t   n_dst;        /* destination net or host */
  79. #define        RIP_DEFAULT        0
  80.     u_int32_t   n_mask;        /* netmask in RIPv2 */
  81.     u_int32_t   n_nhop;        /* optional next hop in RIPv2 */
  82.     u_int32_t   n_metric;        /* cost of route */
  83. };
  84. #endif
  85.  
  86. /* RIPv2 authentication */
  87. struct netauth {
  88.     u_int16_t   a_family;        /* always RIP_AF_AUTH */
  89.     u_int16_t   a_type;
  90. #define        RIP_AUTH_NONE   0
  91. #define        RIP_AUTH_PW        htons(2)    /* password type */
  92. #define        RIP_AUTH_MD5    htons(3)    /* Keyed MD5 */
  93.     union {
  94. #define        RIP_AUTH_PW_LEN 16
  95.         u_int8_t    au_pw[RIP_AUTH_PW_LEN];
  96.         struct a_md5 {
  97.         int16_t    md5_pkt_len;    /* RIP-II packet length */
  98.         int8_t    md5_keyid;    /* key ID and auth data len */
  99.         int8_t    md5_auth_len;    /* 16 */
  100.         u_int32_t md5_seqno;    /* sequence number */
  101.         u_int32_t rsvd[2];    /* must be 0 */
  102. #define        RIP_AUTH_MD5_LEN RIP_AUTH_PW_LEN
  103.         } a_md5;
  104.     } au;
  105. };
  106.  
  107. struct rip {
  108.     u_int8_t    rip_cmd;        /* request/response */
  109.     u_int8_t    rip_vers;        /* protocol version # */
  110.     u_int16_t   rip_res1;        /* pad to 32-bit boundary */
  111.     union {                /* variable length... */
  112.         struct netinfo ru_nets[1];
  113.         int8_t    ru_tracefile[1];
  114.         struct netauth ru_auth[1];
  115.     } ripun;
  116. #define    rip_nets    ripun.ru_nets
  117. #define rip_auths    ripun.ru_auth
  118. #define    rip_tracefile    ripun.ru_tracefile
  119. };
  120.  
  121. /* Packet types.
  122.  */
  123. #define    RIPCMD_REQUEST        1    /* want info */
  124. #define    RIPCMD_RESPONSE        2    /* responding to request */
  125. #define    RIPCMD_TRACEON        3    /* turn tracing on */
  126. #define    RIPCMD_TRACEOFF        4    /* turn it off */
  127.  
  128. /* Gated extended RIP to include a "poll" command instead of using
  129.  * RIPCMD_REQUEST with (RIP_AF_UNSPEC, RIP_DEFAULT).  RFC 1058 says
  130.  * command 5 is used by Sun Microsystems for its own purposes.
  131.  */
  132. #define RIPCMD_POLL        5
  133.  
  134. #define    RIPCMD_MAX        6
  135.  
  136. #ifdef RIPCMDS
  137. char *ripcmds[RIPCMD_MAX] = {
  138.     "#0", "REQUEST", "RESPONSE", "TRACEON", "TRACEOFF"
  139. };
  140. #endif
  141.  
  142. #define    HOPCNT_INFINITY        16
  143. #define    MAXPACKETSIZE        512    /* max broadcast size */
  144. #define NETS_LEN ((MAXPACKETSIZE-sizeof(struct rip))    \
  145.               / sizeof(struct netinfo) +1)
  146.  
  147. #define INADDR_RIP_GROUP (u_int32_t)0xe0000009    /* 224.0.0.9 */
  148.  
  149.  
  150. /* Timer values used in managing the routing table.
  151.  *
  152.  * Complete tables are broadcast every SUPPLY_INTERVAL seconds.
  153.  * If changes occur between updates, dynamic updates containing only changes
  154.  * may be sent.  When these are sent, a timer is set for a random value
  155.  * between MIN_WAITTIME and MAX_WAITTIME, and no additional dynamic updates
  156.  * are sent until the timer expires.
  157.  *
  158.  * Every update of a routing entry forces an entry's timer to be reset.
  159.  * After EXPIRE_TIME without updates, the entry is marked invalid,
  160.  * but held onto until GARBAGE_TIME so that others may see it, to
  161.  * "poison" the bad route.
  162.  */
  163. #define    SUPPLY_INTERVAL        30    /* time to supply tables */
  164. #define    MIN_WAITTIME        2    /* min sec until next flash updates */
  165. #define    MAX_WAITTIME        5    /* max sec until flash update */
  166.  
  167. #define STALE_TIME        90    /* switch to a new gateway */
  168. #define    EXPIRE_TIME        180    /* time to mark entry invalid */
  169. #define    GARBAGE_TIME        240    /* time to garbage collect */
  170.  
  171. #ifdef __cplusplus
  172. }
  173. #endif
  174. #endif /* !_ROUTED_H_ */
  175.